<?php
/* ====================================================================
 *
 *                 Receive.php 由网银在线技术支持提供
 *
 *     本页面为支付完成后获取返回的参数及处理......
 *
 *
 * ====================================================================
 */
require_once($_SERVER['DOCUMENT_ROOT'] . '/all.conf.php');
require_once(__PHY_LIB.'/inc/api.inc.php');
require_once(__PHY_LIB.'/class/FnOrder.class.php');

//**************************************//MD5密钥要跟订单提交页相同，如Send.asp里的 key = "test" ,修改""号内 test 为您的密钥
										//如果您还没有设置MD5密钥请登陆我们为您提供商户后台，地址：https://merchant3.chinabank.com.cn/
$key='tixuhuilongwulu1500C';			//登陆后在上面的导航栏里可能找到“资料管理”，在资料管理的二级导航栏里有“MD5密钥设置” 
										//建议您设置一个16位以上的密钥或更高，密钥最多64位，但设置16位已经足够了
//**************************************

$v_oid       = trim($_POST['v_oid']);       // 商户发送的v_oid定单编号   
$v_pmode     = trim($_POST['v_pmode']);    // 支付方式（字符串）   
$v_pstatus   = trim($_POST['v_pstatus']);   //  支付状态 ：20（支付成功）；30（支付失败）
$v_pstring   = trim($_POST['v_pstring']);   // 支付结果信息 ： 支付完成（当v_pstatus=20时）；失败原因（当v_pstatus=30时,字符串）； 
$v_amount    = trim($_POST['v_amount']);     // 订单实际支付金额
$v_moneytype = trim($_POST['v_moneytype']); //订单实际支付币种    
$remark1     = trim($_POST['remark1' ]);      //备注字段1
$remark2     = trim($_POST['remark2' ]);     //备注字段2
$v_md5str    = trim($_POST['v_md5str' ]);   //拼凑后的MD5校验值  

/**
 * 重新计算md5的值
 */
$md5string = strtoupper(md5($v_oid.$v_pstatus.$v_amount.$v_moneytype.$key));

/** 调试用代码
echo "<br /> v_oid is :".$v_oid;
echo "<br /> v_pmode is :".$v_pmode;
echo "<br /> v_pstatus is :".$v_pstatus;
echo "<br /> v_pstring is :".$v_pstring;
echo "<br /> v_amount is :".$v_amount;
echo "<br /> v_moneytype is :".$v_moneytype;
echo "<br /> v_md5str is :<font color='red'>".$v_md5str."</font> 《网银在线》 返回的数字签名";
echo "<br />";
 */
$sMsg = false;
if ($v_md5str == $md5string) {
	if ($v_pstatus == "20") { // 支付成功
		$oOrder = new Order($v_oid);
		if (!(0 < $oOrder->getID())) {
			$sMsg = '找不到该订单';
		}
		elseif ('unpaid' == $oOrder->get('status')) {
			$oOrder->set('status', 'paid');
			$oOrder->update();
			$oOrder->reduceStockLock();
			/// 订单更新日志 ///
			$rParam = array(
				'Price' => $v_amount,
				'Method' => 'chinabank',
			);
			$oOrder->addChangelog('prepay', $rParam);
			/// 给买家积分 ///
			$oOrder->giveBuyerCoin();
		}
		elseif ('paid' == $oOrder->get('status')) {
			;
		}
		else {
			$sMsg = '订单状态不是未付款，无法继续。';
		}
	}
	else { $sMsg = '支付失败'; }
}
else { $sMsg = '校验失败'; }

/// 输出 ///
if ($sMsg) { echo 'error'; }
else { echo 'ok'; }
?>
